library (tidyverse)
library (janitor)
library (pscl)
library (openxlsx)
library (flextable)
library (officer)


# Importar base de dados####

caminho_arquivo <- "informar o caminho para o arquivo"

setwd (caminho_arquivo)

dados <- read.xlsx("Banco de dados sem identificação.xlsx")

#Tabela 01 - Quantidade de percentual de cada profissional dentro do universo de estudo#### 

tab1 <- dados %>% 
  dplyr::rename(Juiz = `4..Juiz(a).-.nome.fictício`,
                Promotor = `5..Promotor(a).-.nome.fictício`,
                Defesa = `6..Defensor(a).-.nome.fictício`) %>% 
  dplyr::select(c(Juiz, Promotor, Defesa)) %>% 
  pivot_longer (cols = c(Juiz, Promotor, Defesa), names_to = "Cargo", values_to = "Profissional") %>% 
  group_by(Cargo, Profissional) %>% 
  summarise (N = n()) %>% 
  mutate (`%` = N/sum(N)*100) %>% 
  bind_rows(summarise_all (., ~ if (is.numeric(.)) sum(.) else "Total")) %>% 
  arrange(desc(Cargo), by_group = T)
  
tab1$Profissional [is.na (tab1$Profissional)] <- "Advogado particular"

tab1.exp = flextable(tab1) %>% 
  merge_v() %>% 
  hline_top(border =  fp_border (color = "#ED7D31", style = "solid", width = 3), 
            part = "header") %>%
  hline_top(border =  fp_border (color = "white", style = "solid", width = 0), 
            part = "body") %>%
  hline_bottom(border =  fp_border (color = "#ED7D31", style = "solid", width = 3), 
               part = "body") %>% 
  fix_border_issues(part = "body") %>% 
  colformat_double(j = 4, digits = 2) %>% 
  autofit()

save_as_docx (tab1.exp, path = "Tabela1.docx")

#Tabela 02 – Perfil socioeconômico dos suspeitos e características dos crimes#### 
#trazidos à audiência de custódia
str (dados)

tab2 = dados %>% 
  dplyr::rename (Sexo = `8..Sexo`,
                 Idade = `9..Idade`,
                 Raca = `10..Raça`,
                 Escola = `12..Escolaridade`,
                 Arma = `16..Há.menção.ao.uso.de.arma.em.algum.depoimento?`,
                 Antecedente = `18..Qual.o.registro.na.folha.de.antecedentes.criminais?`) %>% 
  dplyr::select(c(Sexo, Idade, Raca, Escola, Arma, Antecedente)) %>% 
  mutate (Idade = as.numeric (Idade),
          Idade_agrup = ifelse (Idade < 30, "Idade entre 18 e 29 anos", "Outras Idades"),
          Escola_agrup = ifelse (Escola %in% c("1º grau completo", "1º grau incompleto"),
                                 "Educação até ensino médio",
                                 "Outra escolaridade"),
          Antecedente_agrup = ifelse (Antecedente == "Ausencia de antecedentes criminais",
                                      "Não",
                                      "Registro de antecedentes criminais")) %>% 
  dplyr::select(-c(Idade, Escola, Antecedente)) %>% 
  pivot_longer(cols = c(Sexo, Idade_agrup, Raca, Escola_agrup, Arma, Antecedente_agrup),
               names_to = "Variaveis", values_to = "Características") %>% 
  group_by(Variaveis, Características) %>% 
  summarise (N = n())


tab2 = tab2 %>% 
  ungroup() %>% 
  dplyr::select(-Variaveis) %>% 
  filter (`Características` %in% c("Registro de antecedentes criminais",
                                   "Sim",
                                   "Educação até ensino médio",
                                   "Idade entre 18 e 29 anos",
                                   "Negro",
                                   "Masculino"))

tab2$Características [tab2$Características == "Sim"] <- "Uso de arma quando cometeu o crime"

tab2$Características = factor (tab2$Características, 
                               levels = c("Masculino", 
                                          "Negro", 
                                          "Idade entre 18 e 29 anos",
                                          "Educação até ensino médio",
                                          "Uso de arma quando cometeu o crime",
                                          "Registro de antecedentes criminais"))

tab2 = tab2 %>% arrange(Características, desc(Características))

tab2.exp = flextable(tab2) %>% 
  hline_top(border =  fp_border (color = "#ED7D31", style = "solid", width = 3), 
            part = "header") %>%
  hline_top(border =  fp_border (color = "white", style = "solid", width = 0), 
            part = "body") %>%
  hline_bottom(border =  fp_border (color = "#ED7D31", style = "solid", width = 3), 
               part = "body") %>% 
  fix_border_issues(part = "body") %>% 
  colformat_double(j = 3, digits = 0, suffix = "%") %>% 
  autofit()

save_as_docx(tab2.exp, path = "Tabela2.docx")

#Tabela 03 – Cruzamento entre juiz do caso e tipo de decisão (liberdade ou prisão)#### 
#e juiz do caso dados "prisão" na decisão judicial

tab3 = dados %>% 
  dplyr::rename (Juiz = `4..Juiz(a).-.nome.fictício`,
                 Decisao = `19..Decisão.do.juiz.do.DIPO:`) %>% 
  dplyr::select (Juiz, Decisao) %>% 
  mutate (Decisao = ifelse (Decisao == "Decretação de prisão preventiva", "Sim", "Não")) %>% 
  group_by (Juiz, Decisao) %>%
  summarise (prisao = n()) %>% 
  mutate (`%` = prisao/sum(prisao)*100) %>% 
  group_by (Juiz) %>% 
  mutate (Total = sum (prisao)) %>% 
  pivot_wider(id_cols = c(Juiz, Total), names_from = (Decisao), values_from = c(prisao, `%`)) %>% 
  dplyr::select (Juiz, Total, prisao_Não, `%_Não`, prisao_Sim, `%_Sim`) %>% 
  adorn_totals("row")
  
tab3.exp = flextable(tab3) %>%
  set_header_labels(values = c("Juiz",
                               "Total de decisões",
                               "Não", "%",
                               "Sim", "%")) %>% 
  add_header_row(values = c("", "", "Prisão preventiva"),
                 colwidths = c(1, 1, 4), top = T) %>% 

  align(i = 1:2, align = "center", part = "header") %>%
  align(j = 2, align = "center", part = "body") %>% 
  hline_top(border =  fp_border (color = "#ED7D31", style = "solid", width = 3), 
            part = "header") %>%
  hline_top(border =  fp_border (color = "white", style = "solid", width = 0), 
            part = "body") %>%
  border_inner_h(border = fp_border (color = "white", style = "solid", width = 0), 
                 part = "header") %>% 
  hline_bottom(border =  fp_border (color = "#ED7D31", style = "solid", width = 3), 
               part = "body") %>% 
  fix_border_issues(part = "body") %>% 
  colformat_double(j = c(4,6), digits = 1, suffix = "%") %>% 
  autofit()

save_as_docx(tab3.exp, path = "Tabela3.docx")


## teste chi2 entre Paulo e Cézar e decisão proferida:

tab.chisq = dados %>% 
  dplyr::rename (Juiz = `4..Juiz(a).-.nome.fictício`,
                 Decisao = `19..Decisão.do.juiz.do.DIPO:`) %>% 
  dplyr::select (Juiz, Decisao) %>% 
  mutate (Decisao = ifelse (Decisao == "Decretação de prisão preventiva", "Sim", "Não")) %>% 
  group_by (Juiz, Decisao) %>%
  summarise (prisao = n()) %>% 
  filter (Juiz != "Plantonista") %>% 
  pivot_wider(id_cols = Juiz, names_from = Decisao, values_from = prisao) 

(Testechi2 <- chisq.test (tab.chisq[,2:3]))

View(Testechi2)


# Tabela 04 - teste de hipóteses de proporção entre as prisões decretadas####
#pelo juiz Cézar e Paulo nas audiências de custódia em Belo Horizonte

tab4 = dados %>% 
  rename (Juiz = `4..Juiz(a).-.nome.fictício`,
                 Decisao = `19..Decisão.do.juiz.do.DIPO:`) %>% 
  dplyr::select (Juiz, Decisao) %>% 
  mutate (Decisao = ifelse (Decisao == "Decretação de prisão preventiva", "Sim", "Não")) %>% 
  filter (Juiz != "Plantonista") %>% 
  count(Juiz, Decisao) %>%
  group_by(Juiz) %>% 
  mutate (Total = sum (n)) %>% 
  filter (Decisao == "Sim") %>% 
  mutate (Percentual = n/Total*100) %>% 
  dplyr::select (Juiz, n, Percentual, Total)
  
(teste = prop.test(x = tab4$n, n = tab4$Total, correct = T))

tab4 = cbind (tab4,
              data.frame (
                "Qui.quadrado" = c(round (teste$statistic, 2), ""),
                "IC" = c(
                  paste0(round (teste$conf.int[1], 2), " - ", round (teste$conf.int[2], 2)), ""),
                "p" = c("p < 0,001", "")
              ))


tab4.exp = flextable(tab4) %>%
  set_header_labels(values = c("Juiz",
                               "Prisões decretadas",
                               "Percentual de prisões",
                               "Total de decisões",
                               "Qui-quadrado",
                               "Intevalo de confiança",
                               "Valor p")) %>% 
  align(i = 1, align = "center", part = "header") %>%
  align(j = 1:7, align = "center", part = "header") %>%
  align(j = 2, align = "center", part = "body") %>% 
  hline_top(border =  fp_border (color = "#ED7D31", style = "solid", width = 3), 
            part = "header") %>%
  hline_top(border =  fp_border (color = "white", style = "solid", width = 0), 
            part = "body") %>%
  hline_bottom(border =  fp_border (color = "#ED7D31", style = "solid", width = 3), 
               part = "body") %>% 
  fix_border_issues(part = "body") %>% 
  colformat_double(j = 3, digits = 1, decimal.mark = ",", big.mark = ".", suffix = "%") %>% 
  colformat_double(j = c(5,6), digits = 1, decimal.mark = ",") %>% 
  autofit()

save_as_docx(tab4.exp, path = "Tabela4.docx")

# Tabela 05 - Resultados dos modelos de regressão logística binomial ####
#que estimam as razões de chance de prisão provisória por juiz que decide o caso

options(scipen = 999)


Dados_modelo = dados %>% 
  dplyr::rename (Juiz = `4..Juiz(a).-.nome.fictício`,
                 Promotor_permanente = `5..Promotor(a).-.nome.fictício`,
                 Defensor_permanente = `6..Defensor(a).-.nome.fictício`,
                 Homem = `8..Sexo`,
                 Idade = `9..Idade`,
                 Negro = `10..Raça`,
                 Escola = `12..Escolaridade`,
                 Uso_arma = `16..Há.menção.ao.uso.de.arma.em.algum.depoimento?`,
                 Antecedente = `18..Qual.o.registro.na.folha.de.antecedentes.criminais?`,
                 Prisao = `19..Decisão.do.juiz.do.DIPO:`) %>% 
  dplyr::select (c(Juiz, Promotor_permanente, Defensor_permanente, Homem, Idade, Negro, Escola, Uso_arma, Antecedente, Prisao)) %>% 
  dplyr::filter (!is.na (Defensor_permanente),
                 Escola != "Dado prejudicado") %>% 
  mutate (Prisao = ifelse (Prisao == "Decretação de prisão preventiva", 1, 0),
          Promotor_permanente = ifelse (Promotor_permanente == "Ricardo", 1, 0),
          Defensor_permanente = ifelse (Defensor_permanente %in% c("José", "Carlos"), 1, 0),
          Idade = as.numeric (Idade),
          Homem = ifelse (Homem == "Masculino", 1, 0),
          Negro = ifelse (Negro == "Negro", 1, 0),
          Idade_agrup = ifelse (Idade < 30, 1, 0),
          Escola_agrup = ifelse (Escola %in% c("1º grau completo", "1º grau incompleto"),
                                 1, 0),
          Uso_arma = ifelse (Uso_arma == "Sim", 1, 0), 
          Antecedente_agrup = ifelse (Antecedente == "Ausencia de antecedentes criminais",
                                      0, 1)) %>% 
  dplyr::select(-c(Idade, Escola, Antecedente))

# MODELO 01 - decisões do juiz Cézar

dados.cezar = Dados_modelo %>% filter (Juiz == "Cézar")

modeloCézar <- glm (Prisao ~ Promotor_permanente + Defensor_permanente + Homem + Idade_agrup + Escola_agrup + Negro + Uso_arma + Antecedente_agrup, 
                    data = dados.cezar,
                    family = binomial)

## MODELO 02 - decisões do juiz Paulo

dados.paulo = Dados_modelo %>% filter (Juiz == "Paulo")


modeloPaulo<- glm(Prisao ~ Promotor_permanente + Defensor_permanente + Homem + Idade_agrup + Escola_agrup + Negro + Uso_arma + Antecedente_agrup, 
                  data = dados.paulo, 
                  family = binomial)

tab5 =  data.frame (coef.cezar = broom::tidy(modeloCézar)$estimate, 
                    p.cezar = broom::tidy(modeloCézar)$p.value,
                    exp_b.Cezar = exp(coef(modeloCézar)),
                    coef.paulo = broom::tidy(modeloPaulo)$estimate, 
                    p.paulo = broom::tidy(modeloPaulo)$p.value,
                    exp_b.paulo = exp(coef(modeloPaulo))
                    )

tab5$Variáveis = rownames(tab5)

rownames(tab5) = NULL

tab5 = tab5 %>% dplyr::select (Variáveis, names (tab5)[1:6])

Ncasos = c(NA, nobs(modeloCézar), NA, NA, nobs(modeloPaulo), NA, NA)

pseudo_r2 = c(NA,
              round(pR2(modeloCézar, type = "McFadden")[4], 3), NA, NA, 
              round(pR2(modeloPaulo, type = "McFadden")[4], 3), NA, NA)

tab5 = rbind (tab5, Ncasos, pseudo_r2)

tab5$Variáveis = c("Constante",
                   "Promotor permanente", 
                   "Defensor permanente",
                   "Homem",
                   "Negro",
                   "Idade entre 10 e 29",
                   "Educação até nível médio",
                   "Uso de arma de fogo",
                   "Antecedente criminal",
                   "Número de casos", 
                   "Nagelkerke Pseudo R-square")

tab5$Variáveis = factor (tab5$Variáveis, levels = c("Promotor permanente", 
                                                     "Defensor permanente",
                                                     "Homem",
                                                     "Negro",
                                                     "Idade entre 10 e 29",
                                                     "Educação até nível médio",
                                                     "Uso de arma de fogo",
                                                     "Antecedente criminal",
                                                     "Constante",
                                                     "Número de casos", 
                                                     "Nagelkerke Pseudo R-square"))
tab5 = tab5 %>% arrange (Variáveis)

tab5.exp = flextable(tab5) %>%
  set_header_labels(values = c("Variável",
                               "B", "Sig.", "Exp(B)",
                               "B", "Sig.", "Exp(B)")) %>% 
  add_header_row(values = c("", "Juíz Cézar", "Juíz Paulo"),
                 colwidths = c(1, 3, 3), top = T) %>% 
  valign(valign = "center", part = "header") %>% 
  align(i = 1, align = "left", part = "header") %>%
  align(i = 2, align = "center", part = "header") %>%
  align(j = 2:7, align = "center", part = "body") %>% 
  hline_top(border =  fp_border (color = "#ED7D31", style = "solid", width = 3), 
            part = "header") %>%
  hline_top(border =  fp_border (color = "white", style = "solid", width = 0), 
            part = "body") %>%
  border_inner_h(border = fp_border (color = "white", style = "solid", width = 0), 
                 part = "header") %>% 
  hline_bottom(border =  fp_border (color = "#ED7D31", style = "solid", width = 3), 
               part = "body") %>% 
  fix_border_issues(part = "body") %>% 
  colformat_double (j = 2:7, digits = 3, big.mark = ".", decimal.mark = ",") %>%
  mk_par(i = 10, j = 2, as_paragraph("136"), part = "body") %>% 
  mk_par(i = 10, j = 5, as_paragraph("267"), part = "body") %>% 
  autofit()

save_as_docx(tab5.exp, path = "Tabela5.docx")

#--------------------------------------------------------------------
#Plus: tabela 5 em inglês

tab5 =  data.frame (coef.cezar = broom::tidy(modeloCézar)$estimate, 
                    p.cezar = broom::tidy(modeloCézar)$p.value,
                    exp_b.Cezar = exp(coef(modeloCézar)),
                    coef.paulo = broom::tidy(modeloPaulo)$estimate, 
                    p.paulo = broom::tidy(modeloPaulo)$p.value,
                    exp_b.paulo = exp(coef(modeloPaulo))
)

tab5$Variáveis = rownames(tab5)

rownames(tab5) = NULL

tab5 = tab5 %>% dplyr::select (Variáveis, names (tab5)[1:6])

Ncasos = c(NA, nobs(modeloCézar), NA, NA, nobs(modeloPaulo), NA, NA)

pseudo_r2 = c(NA,
              round(pR2(modeloCézar, type = "McFadden")[4], 3), NA, NA, 
              round(pR2(modeloPaulo, type = "McFadden")[4], 3), NA, NA)

tab5 = rbind (tab5, Ncasos, pseudo_r2)

tab5$Variáveis = c("Constant",
                   "Permanent Prosecutor", 
                   "Permanent Defender",
                   "Male",
                   "Black",
                   "Aged between 18 and 29",
                   "Education up to middle school level",
                   "Use of a firearm",
                   "Presence of criminal record",
                   "Number of cases", 
                   "Nagelkerke Pseudo R-square")

tab5$Variáveis = factor (tab5$Variáveis, levels = c("Permanent Prosecutor", 
                                                    "Permanent Defender",
                                                    "Male",
                                                    "Black",
                                                    "Aged between 18 and 29",
                                                    "Education up to middle school level",
                                                    "Use of a firearm",
                                                    "Presence of criminal record",
                                                    "Constant",
                                                    "Number of cases", 
                                                    "Nagelkerke Pseudo R-square"))
tab5 = tab5 %>% arrange (Variáveis)

tab5.exp = flextable(tab5) %>%
  set_header_labels(values = c("Variable",
                               "B", "Sig.", "Exp(B)",
                               "B", "Sig.", "Exp(B)")) %>% 
  add_header_row(values = c("", "Judge Cézar", "Judge Paulo"),
                 colwidths = c(1, 3, 3), top = T) %>% 
  valign(valign = "center", part = "header") %>% 
  align(i = 1, align = "left", part = "header") %>%
  align(i = 2, align = "center", part = "header") %>%
  align(j = 2:7, align = "center", part = "body") %>% 
  hline_top(border =  fp_border (color = "#ED7D31", style = "solid", width = 3), 
            part = "header") %>%
  hline_top(border =  fp_border (color = "white", style = "solid", width = 0), 
            part = "body") %>%
  border_inner_h(border = fp_border (color = "white", style = "solid", width = 0), 
                 part = "header") %>% 
  hline_bottom(border =  fp_border (color = "#ED7D31", style = "solid", width = 3), 
               part = "body") %>% 
  fix_border_issues(part = "body") %>% 
  colformat_double (j = 2:7, digits = 3) %>%
  mk_par(i = 10, j = 2, as_paragraph("136"), part = "body") %>% 
  mk_par(i = 10, j = 5, as_paragraph("267"), part = "body") %>% 
  autofit()

save_as_docx(tab5.exp, path = "Tabela5_ingles.docx")
